import backtrader as bt

class AStockCommission(bt.CommInfoBase):
    """
    一个为A股市场量身定制的交易成本方案。
    - 佣金: 可配置，有最低5元的限制。
    - 印花税: 仅在卖出时收取，费率为0.1%。
    """
    params = (
        ('commission', 0.0003),  # 佣金率，万分之三
        ('min_commission', 5),   # 最低佣金
        ('stamp_duty', 0.001),   # 印花税率，千分之一
        ('stocklike', True),     # 是否为股票类（需要计算印花税）
    )

    def _getcommission(self, size, price, pseudoexec):
        """
        计算佣金的核心方法。
        """
        value = size * price
        
        # 计算佣金
        comm = abs(value) * self.p.commission
        comm = max(comm, self.p.min_commission) # 应用最低佣金规则
        
        # 如果是卖出股票，则加上印花税
        if self.p.stocklike and size < 0:
            stamp_duty = abs(value) * self.p.stamp_duty
            comm += stamp_duty
            
        return comm 